# Group 与策略信号混合 同一 Operator 中,**run_freq** 与 **run_timing** 相同的策略会被归入同一个 Group;每个 Group 内可用 **blender** 表达式将多个策略的信号合并为一个。 ## Group 的由来 - 添加策略时若指定了 ``run_freq``、``run_timing``,与已有某组相同则归入该组,否则新建一组。 - 回测/实盘时按 Group 为单位调度:同一 Group 内各策略在同一时刻运行,再用 blender 合并输出。 ## 查看 Operator 的 Group - **groups**:各 Group 的配置与所含策略。 - **group_timing_table**:各组对应的 run_freq、run_timing 一览,便于核对运行时刻。 ## blender 表达式 Blender 将同组内多个策略的信号(按加入顺序记为 s0, s1, s2, …)合并为一个。常用形式: | 表达式 | 含义 | |--------|------| | ``s0`` | 仅使用第一个策略的信号。 | | ``0.5*s0+0.5*s1`` | 两策略信号等权加权。 | | ``s0*s1`` | 两信号逐元素相乘(如择时仓位相乘)。 | | ``(s0+s1)/2`` | 与 0.5*s0+0.5*s1 等价。 | 与 **signal_type** 的关系:PT 时 s0/s1 通常为 [0,1] 的仓位;PS 时需按具体策略约定理解。所有支持的运算为标量与 s0/s1/… 的加减乘除及常数组合。 ## 多组时的合并 当 Operator 内有多个 Group 时,**group_merge_type** 决定多组最终信号如何合并: - **None**:按框架默认方式(通常为最后一组或指定组)输出。 - **And**:多组信号做“与”逻辑(如择时均为 1 才为 1)。 - **Or**:多组信号做“或”逻辑。 ## 示例 两个择时策略等权混合的典型写法: ```python op = qt.Operator(signal_type='PT', run_freq='d') op.add_strategy('dma', run_freq='d', run_timing='open') op.add_strategy('macd', run_freq='d', run_timing='open') # 在 Group 的 blender 中设置为 0.5*s0+0.5*s1(具体 API 以当前版本为准) ``` 配置完成后,该 Group 在每个运行时刻会先分别计算 dma 与 macd 的信号,再按 blender 输出合并后的仓位。